from django.db import models
from django.contrib.auth.models import AbstractUser,UserManager as _UserManager#自带认证系统,认证系统管理器

# 属性解释
# unique            唯一值
# help_text admin   站点的帮助信息
# validators        校验器
# error_messages    错误提示
# blank=True        校验时允许为空
# null = True       数据库存储允许空
# timezone.now      时区.now 获得当前时区时间


# 字段解释
# is_staff = True   允许登录admin站点
# is_active = True  活跃用户可以登录网站
# date_joined       注册时间
# objects           orm管理器
# EMAIL_FIELD       邮箱
# USERNAME_FIELD    用户名
# REQUIRED_FIELDS   注册时需要加载的指定信息列表
class UserManager(_UserManager):
    '''
    重写管理器方法
    调用create_superuser()方法时需要email参数,在此重写,使之后email字段可为空
    '''
    def create_superuser(self, username,  password, email=None, **extra_fields):
        # super(UserManager,self).create_superuser(
        #      username=username,#py2写法
        #      email=email,
        #      password=password,
        #      **extra_fields)
        super().create_superuser(#py3写法
             username=username,
             password=password,
             email=email,
             **extra_fields)
class Users(AbstractUser):
    '''
    add mobile email_active fields to django users modules
    给用户模型增加字段:手机号,邮件激活
    注意:在settings中指定 用户模型
    AUTH_USER_MODEL = 'user.Users'
    '''
    REQUIRED_FIELDS = ['mobile']#注册时仅不填写email字段
    objects = UserManager()#调用新的管理器
    mobile = models.CharField(#手机号字段
        max_length=11,
          unique=True,
          help_text="手机号",
          verbose_name="手机号",
          error_messages={
            'unique': "此手机号已经注册"
            # 'unique': _("The mobile has been used")#国际化自动翻译
        ,},)
    email_active = models.BooleanField(#邮箱验证状态字段
        default=False,
           verbose_name="邮箱验证状态",)
    class Meta:
        db_table = "tb_users"
        verbose_name = "用户"
        verbose_name_plural = verbose_name

    def get_groups_name(self):
        groups_name_list = [i.name for i in self.groups.all()]
        return ' | '.join(groups_name_list)
    def __str__(self):
        return self.username
